import javafx.util.Pair;

import java.util.HashMap;
import java.util.Map;

public class Solution17 {
    public static void main(String[] args) {
        char[][] chars = {
                {'M','M','M','E','E','M','E','M','E','M','M','E','E','E','E','M','M','E','M','E','M','E','E','E','M','E','M','M','M','E','E','E','M','E','E','M','M','M','E','E','E','E','E','E','E','E','E','E','M','E'},
                {'M','M','M','E','E','M','E','M','M','E','E','M','M','M','E','M','M','E','M','E','E','M','M','E','E','M','E','E','M','E','E','E','E','M','E','E','E','E','E','E','M','E','E','M','E','E','M','E','E','E'},
                {'E','E','E','E','M','M','M','E','M','M','M','E','E','E','M','E','M','E','E','E','E','M','E','E','E','M','E','M','M','E','M','E','M','E','M','M','E','E','E','M','E','E','E','M','M','M','M','M','E','M'},
                {'E','E','M','E','E','E','E','M','E','M','M','M','E','E','M','E','M','M','M','M','E','E','E','M','M','E','E','M','M','E','E','M','M','E','E','M','E','M','M','E','E','E','M','M','E','M','E','M','E','M'},
                {'M','M','E','E','M','M','M','E','E','E','M','E','E','M','E','E','M','E','M','M','E','E','E','M','E','E','E','E','M','M','M','M','M','M','M','M','E','E','E','E','E','E','E','E','E','E','E','M','E','M'},
                {'E','M','M','E','M','M','M','E','E','M','M','M','E','M','E','M','E','M','M','E','E','M','E','M','M','E','E','M','M','E','M','E','M','E','E','E','E','E','E','E','M','E','M','E','M','M','E','M','E','M'},{'E','E','M','E','E','E','E','M','E','M','E','E','M','E','E','E','M','E','E','M','E','E','E','E','M','E','M','E','E','E','E','M','E','E','M','E','M','M','E','E','M','E','M','M','E','E','M','M','M','E'},{'E','E','M','M','E','E','M','E','E','E','E','E','M','E','E','E','M','E','E','M','M','M','E','M','M','M','E','M','E','M','M','E','E','M','M','M','E','M','E','M','M','E','E','E','E','E','E','E','M','E'},{'M','M','M','E','E','E','M','E','E','E','M','M','E','M','E','E','M','M','E','M','E','M','E','M','M','E','M','M','E','M','M','E','E','E','M','M','M','M','E','E','E','E','E','E','E','E','E','E','M','M'},{'E','E','M','M','E','M','M','E','M','E','M','E','E','E','E','M','M','M','M','E','M','E','E','M','E','M','M','E','M','E','M','E','M','E','M','E','E','E','E','E','E','M','M','E','E','E','E','E','E','E'},{'E','M','M','M','M','E','M','M','M','E','E','E','E','M','E','M','E','E','M','E','M','E','E','E','M','E','E','M','E','M','M','M','E','E','E','E','E','E','E','M','E','E','E','E','E','E','E','E','E','E'},{'M','E','M','M','E','E','E','E','E','E','E','M','M','E','M','E','M','E','M','E','E','M','M','E','M','M','M','E','E','M','M','E','E','E','E','E','E','E','E','E','E','E','E','M','E','M','E','M','M','E'},{'E','E','E','E','E','M','E','E','E','M','E','E','M','E','E','E','E','M','E','E','M','E','E','M','E','E','E','E','E','M','M','M','E','E','M','E','2','E','E','E','M','M','E','E','M','E','E','E','E','M'},{'E','M','E','M','M','E','E','E','E','M','E','E','E','E','E','M','E','E','M','E','E','E','E','E','M','E','E','M','E','E','E','E','E','M','M','M','E','M','M','E','M','E','E','E','E','E','E','E','E','E'},{'E','M','E','M','E','E','E','E','E','M','M','M','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','E','M','M','E','E','E','E','M','E','M','E','M','M','E','E','E','E'},{'E','M','E','M','E','E','E','M','E','E','M','E','E','E','E','E','E','E','M','E','E','M','E','E','E','E','E','E','E','M','E','M','E','M','M','M','M','E','E','E','M','4','M','E','E','E','E','E','M','M'},{'E','E','E','M','E','M','M','E','E','M','E','E','E','E','E','E','M','E','E','E','M','E','M','E','M','M','E','E','E','E','M','M','E','E','E','M','M','E','M','E','E','E','E','E','E','E','E','E','E','E'},{'E','E','M','4','E','E','E','E','E','E','M','M','M','E','E','M','E','E','M','M','E','E','E','M','E','E','E','E','E','M','E','M','E','E','E','M','E','E','M','E','E','E','E','M','M','M','E','M','E','M'},{'E','E','M','M','E','M','M','M','M','M','M','M','E','E','E','M','M','M','M','E','E','E','E','E','E','E','E','E','E','M','E','E','E','E','E','E','E','E','M','E','M','E','E','E','M','E','E','E','E','M'},{'M','M','E','M','E','E','M','E','M','E','E','E','E','E','E','E','E','E','M','E','E','E','M','M','M','E','M','E','E','M','E','M','E','E','E','E','E','M','E','M','E','E','M','M','M','M','E','M','E','M'},{'M','E','M','M','E','E','M','E','E','M','M','E','E','M','E','E','M','E','E','E','M','E','E','E','M','E','E','M','E','E','M','E','M','E','E','M','E','E','E','M','M','E','E','E','E','M','M','E','M','M'},{'M','E','E','E','E','E','M','E','M','E','E','E','M','M','E','E','M','E','E','E','E','E','M','M','E','E','E','E','E','E','E','E','M','M','E','M','M','E','E','M','E','M','M','E','M','E','M','E','M','E'},{'E','M','E','M','E','E','M','M','M','E','E','M','E','E','M','E','E','E','E','E','E','E','E','M','M','M','M','E','E','E','E','M','M','E','E','E','E','M','E','M','E','E','E','M','E','E','M','M','E','M'},{'E','E','E','E','M','M','M','E','E','M','M','E','M','M','M','E','M','M','E','M','E','M','M','E','M','E','E','M','M','M','E','E','E','E','E','M','E','M','M','M','E','E','M','E','M','E','E','E','E','E'},{'E','E','E','E','M','E','E','E','E','E','M','M','M','M','M','E','M','E','M','M','E','E','E','E','E','M','M','M','E','E','E','E','M','E','M','M','E','M','E','E','E','E','M','E','M','E','M','M','M','E'},{'E','M','E','M','E','M','M','E','E','E','E','E','E','M','E','M','E','E','M','M','E','E','E','M','E','M','E','E','E','E','E','E','M','M','M','E','M','E','E','E','E','M','M','E','M','E','M','E','M','E'},{'E','E','E','E','M','E','E','M','E','E','M','E','E','M','E','M','M','M','M','E','M','E','E','E','E','M','M','M','M','E','E','E','E','E','M','E','M','E','M','E','E','E','M','E','M','E','M','M','E','M'},{'E','M','M','E','E','E','E','M','M','M','E','E','E','M','E','M','M','M','M','E','M','M','E','M','E','E','E','E','M','E','M','E','M','E','E','E','E','M','E','E','M','E','M','M','M','E','E','E','E','M'},{'E','M','E','M','M','M','E','M','E','E','E','M','M','E','M','E','E','M','M','E','M','M','E','E','3','M','M','E','M','M','M','E','E','E','E','E','M','E','E','M','E','E','E','E','E','M','E','M','M','M'},{'M','E','E','E','M','M','M','E','M','E','E','M','M','M','E','E','M','E','E','M','M','E','M','E','M','E','E','E','E','M','E','M','M','M','E','M','M','M','E','M','M','E','M','E','E','E','E','E','E','M'},{'M','E','M','E','E','E','E','E','E','E','E','M','E','M','E','E','E','E','E','M','E','M','E','M','M','M','M','M','E','E','M','E','E','E','E','E','M','E','E','M','E','E','E','M','E','M','M','E','M','E'},{'E','E','E','M','E','E','E','E','M','E','E','E','M','E','E','E','E','M','M','E','E','E','M','M','E','M','E','E','E','M','M','M','M','M','E','M','E','E','1','E','E','M','E','E','E','E','E','E','E','E'},{'E','E','E','M','E','E','E','E','E','E','M','E','E','M','E','M','M','M','E','M','E','E','E','M','E','E','M','E','M','E','M','M','E','E','E','M','E','E','E','E','M','M','M','E','M','E','M','M','M','M'},{'E','E','E','M','M','M','E','E','E','E','E','E','E','E','E','E','M','M','E','M','E','M','E','E','M','M','M','M','E','E','E','E','M','E','E','E','M','M','E','E','4','M','E','M','M','M','M','E','E','M'},{'M','E','M','E','E','E','M','M','E','M','E','M','M','E','E','E','E','E','E','M','E','M','M','E','M','M','E','M','M','E','E','E','E','M','E','E','E','E','E','E','M','E','M','E','E','E','M','E','M','E'},{'E','E','E','M','M','E','E','M','E','E','E','E','M','E','M','E','M','E','E','E','E','M','E','E','M','E','E','M','M','E','M','E','M','E','E','E','E','E','M','E','M','M','E','E','E','E','E','E','E','M'},{'E','E','M','M','M','E','E','E','M','E','E','M','M','M','M','E','E','E','E','E','M','E','E','E','M','E','E','E','E','E','E','E','M','E','E','M','E','E','E','M','E','3','M','E','M','M','M','E','M','M'},{'E','E','M','M','E','E','E','E','E','E','E','M','E','E','E','M','M','E','E','M','E','E','E','M','M','E','E','M','E','E','E','E','E','M','M','E','M','M','E','E','E','E','E','E','M','M','M','E','M','E'},{'M','M','E','E','M','M','M','M','M','E','M','M','M','E','E','E','E','M','M','E','E','E','M','M','E','E','E','E','E','E','M','M','E','M','M','M','E','E','E','M','E','M','M','E','M','E','M','M','M','E'},{'E','E','M','M','E','E','E','M','E','E','E','E','M','E','M','E','E','M','E','E','M','E','M','E','E','E','M','E','E','M','E','M','E','E','E','M','E','M','M','M','M','E','M','E','E','E','E','E','E','E'},{'E','E','E','M','5','M','E','E','E','E','E','M','E','M','M','E','M','E','M','E','E','M','E','M','E','E','M','E','E','E','E','E','E','E','E','M','M','E','E','E','M','E','E','M','M','M','E','M','E','M'},{'M','M','M','E','M','M','M','E','M','M','M','E','E','E','M','M','M','E','E','M','E','M','M','M','M','E','E','E','E','E','E','M','M','E','M','M','M','M','M','E','E','E','E','E','M','E','M','E','E','E'},{'E','E','E','E','M','M','M','M','M','M','E','M','E','M','M','E','M','M','M','E','E','E','M','E','E','M','E','E','E','M','M','E','E','M','E','M','M','M','E','M','M','E','E','E','E','E','E','E','M','M'},{'E','E','M','E','M','E','E','E','M','E','E','E','E','E','M','M','M','E','M','E','E','M','E','E','E','E','E','E','E','M','E','M','E','M','E','M','M','E','E','M','E','E','E','E','E','E','E','M','E','M'},{'E','E','E','E','E','E','E','E','E','E','E','E','E','M','M','E','M','E','E','M','E','E','E','E','E','E','E','E','E','E','E','M','E','M','E','E','E','E','E','M','E','M','E','M','E','E','E','M','M','M'},{'E','M','E','E','E','E','E','E','E','M','E','E','M','E','E','M','M','E','E','E','M','M','E','E','M','E','E','E','M','E','E','M','M','M','E','M','E','M','E','E','E','E','M','M','M','M','M','M','E','M'},{'M','E','E','E','M','M','M','E','E','M','E','M','M','M','E','E','E','E','E','E','M','M','E','E','E','E','E','E','E','M','M','E','E','M','M','M','E','E','E','E','M','E','M','E','E','M','E','M','M','E'},{'E','E','M','M','E','M','E','M','E','E','E','M','E','M','M','M','E','E','E','E','M','E','E','M','E','E','M','E','E','M','E','E','E','M','E','M','E','E','M','M','E','M','E','E','E','M','E','E','M','E'},{'E','M','E','E','M','M','M','M','E','E','E','E','E','E','E','M','E','E','E','M','E','E','M','E','E','E','M','M','M','M','M','E','E','E','E','E','M','E','M','E','E','E','M','E','M','E','E','E','E','M'},{'E','M','M','E','M','E','M','M','E','E','M','M','E','M','E','E','E','M','E','E','E','M','E','E','E','M','E','M','M','E','M','M','M','M','M','M','M','E','M','E','M','E','M','E','M','M','M','E','E','E'}};

        Solution17 solution17 =new Solution17();
        int[] nums = {1,24};
        char[][] chars1 = solution17.updateBoard(chars, nums);
        for (char[] chars2: chars1
             ) {
            for (char c:chars2
                 ) {
                System.out.print(c);
            }
            System.out.println();
        }
    }
    int[] rowDir = { -1, 0, 1, 1, -1, -1, 0, 1};
    int[] colDir = { 0, -1, 1, -1, 1, -1, 1, 0};
    public char[][] updateBoard(char[][] board, int[] click) {
        // 使用一个map对所有的M进行预处理，记录所有地雷周边的数字
        if(board == null)return null;
        if(board[click[0]][click[1]] == 'M'){
            board[click[0]][click[1]] ='X';
            return board;
        }

        // 剩下的情况就是B和数字的
        Map<String,Integer> map = new HashMap<>();
        int n = board.length;
        int m = board[0].length;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(board[i][j] == 'M'){
                    for(int dir =0;dir<rowDir.length;dir++){
                        if(i+rowDir[dir]>=0 &&i+rowDir[dir]<n && j+colDir[dir]>=0&&j+colDir[dir]<m) {
                            String key = (i + rowDir[dir]) + ":" + (j + colDir[dir]);
                            if (board[i + rowDir[dir]][j + colDir[dir]] == 'M') continue;
                            Integer nums = map.getOrDefault(key, 0);
                            map.put(key, nums + 1);
                        }
                    }

                }
            }
        }
        Pair<Integer,Integer> pair = new Pair<>(click[0],click[1]);
        _updateBoard(board, pair,map);
        return board;
    }

    private void _updateBoard(char[][] board, Pair<Integer,Integer> pair,Map<String,Integer> map) {
        Integer row = pair.getKey();
        Integer column = pair.getValue();
        if(map.containsKey(row+":"+column)){
            int nums = map.get(row + ":" + column);
            board[row][column] = (char)(nums+'0');
            return;
        }else{
            if(board[row][column] == 'B')return;
            board[row][column] ='B';
            for(int dir =0;dir<rowDir.length;dir++){
                if(rowDir[dir]+row>=0 &&rowDir[dir]+row<board.length && colDir[dir]+column>=0&&colDir[dir]+column<board[0].length) {
                    Pair<Integer, Integer> newPair = new Pair<>(row + rowDir[dir], column + colDir[dir]);
                    _updateBoard(board, newPair, map);
                }
            }
        }
    }

}
